#pragma once

#include "Noncopyable.h"

class Shape : public Noncopyable
{
protected:
	Shape(void);
	explicit Shape(unsigned long id);
	virtual ~Shape(void);

public:
	bool operator==(const Shape& left)
	{
		return (_id == left._id);
	}

	unsigned long Id() const { return _id; }

private:
	unsigned long _id;
};

class Circle : public Shape
{
public:
	Circle(void) {}
	explicit Circle(unsigned long id) : Shape(id) { }
	virtual ~Circle(void) {}
};

void ShapeAction(void);